home *** CD-ROM | disk | FTP | other *** search
/ Power Hacker 2003 / Power_Hacker_2003.iso / Exploit and vulnerability / w00w00 / sectools / dsniff / dsniff.c < prev    next >
Encoding:
C/C++ Source or Header  |  2000-05-19  |  2.5 KB  |  157 lines

  1. /*
  2.   dsniff.c
  3.  
  4.   Password sniffer, because DrHoney wanted one.
  5.  
  6.   This is intended for demonstration purposes and educational use only.
  7.  
  8.   Copyright (c) 2000 Dug Song <dugsong@monkey.org>
  9.  
  10.   $Id: dsniff.c,v 1.60 2000/05/19 05:05:55 dugsong Exp $
  11. */
  12.  
  13. #include "config.h"
  14. #include <sys/types.h>
  15. #include <stdio.h>
  16. #include <stdlib.h>
  17. #include <unistd.h>
  18. #include <signal.h>
  19. #ifdef HAVE_ERR_H
  20. #include <err.h>
  21. #endif
  22. #include <libnet.h>
  23. #include <nids.h>
  24. #include "options.h"
  25. #include "trigger.h"
  26. #include "record.h"
  27. #include "version.h"
  28.  
  29. #define MAX_LINES    6
  30. #define MIN_SNAPLEN    1024
  31.  
  32. u_short    Opt_dns = 1;
  33. int    Opt_read = 0;
  34. int    Opt_write = 0;
  35. int    Opt_snaplen = MIN_SNAPLEN;
  36. int    Opt_lines = MAX_LINES;
  37. int    Opt_client = 0;
  38. int    Opt_debug = 0;
  39.  
  40. static char   *Opt_services = NULL;
  41. static char   *Opt_savefile = NULL;
  42.  
  43. void
  44. usage(void)
  45. {
  46.     fprintf(stderr, "Version: " VERSION "\n"
  47.         "Usage: dsniff [-cdn] [-i interface] [-s snaplen] "
  48.         "[-f services] [-r|-w savefile]\n");
  49.     exit(1);
  50. }
  51.  
  52. void
  53. sig_hup(int sig)
  54. {
  55.     record_close();
  56.     trigger_dump();
  57.     
  58.     record_init(Opt_savefile);
  59.     trigger_init(Opt_services);
  60. }
  61.  
  62. void
  63. sig_die(int sig)
  64. {
  65.     record_close();
  66.     exit(0);
  67. }
  68.  
  69. void
  70. null_syslog(int type, int errnum, struct ip *iph, void *data)
  71. {
  72. }
  73.  
  74. int
  75. main(int argc, char *argv[])
  76. {
  77.     int c;
  78.     
  79.     while ((c = getopt(argc, argv, "cdf:i:ns:r:w:h?V")) != -1) {
  80.         switch (c) {
  81.         case 'c':
  82.             Opt_client = 1;
  83.             break;
  84.         case 'd':
  85.             Opt_debug = 1;
  86.             break;
  87.         case 'f':
  88.             Opt_services = optarg;
  89.             break;
  90.         case 'i':
  91.             nids_params.device = optarg;
  92.             break;
  93.         case 'n':
  94.             Opt_dns = 0;
  95.             break;
  96.         case 's':
  97.             if ((Opt_snaplen = atoi(optarg)) == 0)
  98.                 usage();
  99.             break;
  100.         case 'r':
  101.             Opt_read = 1;
  102.             Opt_savefile = optarg;
  103.             break;
  104.         case 'w':
  105.             Opt_write = 1;
  106.             Opt_savefile = optarg;
  107.             break;
  108.         default:
  109.             usage();
  110.         }
  111.     }
  112.     argc -= optind;
  113.     argv += optind;
  114.     
  115.     if (argc != 0 || (Opt_read && Opt_write))
  116.         usage();
  117.     
  118.     if (!record_init(Opt_savefile))
  119.         err(1, "record_init");
  120.     
  121.     signal(SIGHUP, sig_hup);
  122.     signal(SIGINT, sig_die);
  123.     signal(SIGTERM, sig_die);
  124.     
  125.     if (Opt_read) {
  126.         record_dump();
  127.         record_close();
  128.         exit(0);
  129.     }
  130.     nids_params.scan_num_hosts = 0;
  131.     nids_params.syslog = null_syslog;
  132.     
  133.     if (!nids_init())
  134.         errx(1, "nids_init: %s", nids_errbuf);
  135.     
  136.     trigger_init(Opt_services);
  137.     
  138.     nids_register_ip(trigger_ip);
  139.     nids_register_ip(trigger_udp);
  140.  
  141.     if (Opt_client) {
  142.         nids_register_ip(trigger_tcp_raw);
  143.         signal(SIGALRM, trigger_tcp_raw_timeout);
  144.         alarm(TRIGGER_TCP_RAW_TIMEOUT);
  145.     }
  146.     else {
  147.         nids_register_tcp(trigger_tcp);
  148.     }
  149.     nids_run();
  150.     
  151.     /* NOTREACHED */
  152.     
  153.     exit(0);
  154. }
  155.  
  156. /* 5000. */
  157.